위젯의 독립성
왜 ProductList 위젯에서 상품을 추가할 때 UI의 변화가 일어 나지 않는가?
debugPrint()
시 item의 개수는 증가한다.- 그치만 item개수를 참조하고 있는 UI의 값은 변경되지 않는다.
위젯의 독립성
- 이유는 Flutter의 위젯이 독립적으로 상태를 관리하고 있기 때문
- 각 위젯은 자체적인 상태와 빌드 메서드를 가지고 있어 다른 위젯과 분리된 상태로 UI를 구성
UI변화가 없는 이유
- **
ProductList
**와MyCart
위젯이 서로 상태를 공유하지 않기 때문 - **
ProductList
**에서 item의 상태가 변경되더라도 **MyCart
**는 이를 인지하지 못함
위젯간 상태를 공유하는 방법은?
State Lifting
- 상태를 공유해야 하는 자식 위젯들이 공통으로 가지고 있는 부모 위젯으로 상태를 끌어올려서 관리하는 방법
- 이 방법으로 부모 위젯이 상태를 관리하고, 자식 위젯들이 부모 위젯으로부터 상태를 받아 사용
단계
- 상태를 관리할 부모 위젯 정의
- 자식 위젯에서 부모 위젯의 상태를 사용
- 자식 위젯에서 부모 위젯의 상태를 업데이트
문제점
상태 관리의 복잡성 증가
- 상태를 공유하는 자식 위젯들이 많아질수록 상위 위젯의 상태 관리가 복잡해짐
위젯 재구성의 비용 증가
- 부모 위젯의 상태가 변경되면 그 상태를 참조하는 모든 자식 위젯이 다시 빌드되어 성능 이슈
코드의 분리 어려움
- 상태와 UI 로직이 하나의 위젯에 집중
해결방법
상태관리 패키지를 사용한다.
- Provider
- RiverPod
- Bloc